/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Compilador;

/**
 *
 * @author Analia
 */

import java.util.LinkedList;

public class Parser
{
   private LinkedList datos;
   private LinkedList valores;
   private Token comando ;
   private Scanner scanner;


    public Parser()
    {
        comando=new Token();
        datos=new LinkedList();
        valores=new LinkedList();
    }
    
    public void inicio()
    {
       datos.clear();
       valores.clear();
       comando.setToken(null,"_");
    }

    public void setScanner(Scanner s)
    {
        this.scanner=s;
    }

    public Object getComando()
    {
       return this.comando;
    }

    public Object getDatos()
    {
      return this.datos;
    }


    public void programa()
    {
       if(scanner.getToken().getToken()==scanner.getToken().getToken().AYUDA)
       {
           comando.setToken(comando.getToken().AYUDA,'_');
           scanner.avanzar();
           return;
       }

       if (scanner.getToken().getToken()==scanner.getToken().getToken().REGISTRAR_USUARIO)
       {
             comando.setToken(comando.getToken().REGISTRAR_USUARIO,'_');
             scanner.avanzar();

             return;
       }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().REGISTRAR_DOCENTE)
       {
             comando.setToken(comando.getToken().REGISTRAR_DOCENTE,'_');
             scanner.avanzar();

             return;
       }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().REGISTRAR_ALUMNO)
       {
             comando.setToken(comando.getToken().REGISTRAR_ALUMNO,'_');
             scanner.avanzar();

             return;
       }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().REGISTRAR_DIRECTOR)
       {
             comando.setToken(comando.getToken().REGISTRAR_DIRECTOR,'_');
             scanner.avanzar();

             return;
       }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().REGISTRAR_MATERIA)
       {
             comando.setToken(comando.getToken().REGISTRAR_MATERIA,'_');
             scanner.avanzar();

             return;
       }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().REGISTRAR_GRUPO)
       {
             comando.setToken(comando.getToken().REGISTRAR_GRUPO,'_');
             scanner.avanzar();

             return;
       }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().RE_ALUMNOMATERIA)
       {
             comando.setToken(comando.getToken().RE_ALUMNOMATERIA,'_');
             scanner.avanzar();

             return;
       }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().RE_DOCENTEMATERIA)
       {
             comando.setToken(comando.getToken().RE_DOCENTEMATERIA,'_');
             scanner.avanzar();

             return;
       }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().RE_EXAMEN)
       {
             comando.setToken(comando.getToken().RE_EXAMEN,'_');
             scanner.avanzar();

             return;
       }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().RE_PROGRAMACION)
       {
             comando.setToken(comando.getToken().RE_PROGRAMACION,'_');
             scanner.avanzar();

             return;
       }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().RE_TIPOPREGUNTA)
       {
             comando.setToken(comando.getToken().RE_TIPOPREGUNTA,'_');
             scanner.avanzar();

             return;
       }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().RE_PREGUNTA)
       {
             comando.setToken(comando.getToken().RE_PREGUNTA,'_');
             scanner.avanzar();

             return;
       }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().RE_RESPUESTA)
       {
             comando.setToken(comando.getToken().RE_RESPUESTA,'_');
             scanner.avanzar();

             return;
       }







       /*
      if (scanner.getToken().getToken()==scanner.getToken().getToken().LISTAR_PEDIDOS)
      {
          comando.setToken(comando.getToken().LISTAR_PEDIDOS,'_');
          scanner.avanzar();
          return;
      }

         if (scanner.getToken().getToken()==scanner.getToken().getToken().LISTAR_CLIENTES)
      {
          comando.setToken(comando.getToken().LISTAR_CLIENTES,'_');
          scanner.avanzar();
          return;
      }

        if (scanner.getToken().getToken()==scanner.getToken().getToken().CANCELAR_PRODUCTO)
        {
             comando.setToken(comando.getToken().CANCELAR_PRODUCTO,'_');
             scanner.avanzar();
             cancelarProducto();
             return;
        }


        if (scanner.getToken().getToken()==scanner.getToken().getToken().REGISTRAR)
        {
             comando.setToken(comando.getToken().REGISTRAR,'_');
             scanner.avanzar();
             //registrarCliente();
             return;
        }
      
       if (scanner.getToken().getToken()==scanner.getToken().getToken().CANCELAR_RESERVA)
        {
             comando.setToken(comando.getToken().CANCELAR_RESERVA,'_');
             scanner.avanzar();
             cancelarProducto();
             return;
        }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().LISTPERSONAS)
        {
             comando.setToken(comando.getToken().LISTPERSONAS,'_');
             scanner.avanzar();
             
             return;
        }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().LISTAR_PRODUCTO)
        {
             comando.setToken(comando.getToken().LISTAR_PRODUCTO,'_');
             scanner.avanzar();

             return;
        }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().LISTAR_RESCLI)
        {
             comando.setToken(comando.getToken().LISTAR_RESCLI,'_');
             scanner.avanzar();

             return;
        }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().LISTAR_PROMOCION)
        {
             comando.setToken(comando.getToken().LISTAR_PROMOCION,'_');
             scanner.avanzar();

             return;
        }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().RESERVAS_CLIENTE)
        {
              comando.setToken(comando.getToken().RESERVAS_CLIENTE,'_');
              scanner.avanzar();
              ordenarProducto();
              return;
        }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().DETALLE_RESERVAS)
        {
            comando.setToken(comando.getToken().DETALLE_RESERVAS,'_');
            scanner.avanzar();
            return;
        }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().RESERVAR_PRODUCTO)
        {
             comando.setToken(comando.getToken().RESERVAR_PRODUCTO,'_');
             scanner.avanzar();

             return;
        }


      

         if (scanner.getToken().getToken()==scanner.getToken().getToken().OFERTA_GENERAL)
        {
             comando.setToken(comando.getToken().OFERTA_GENERAL,'_');
             scanner.avanzar();

             return;
        }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().REGISTRAR_OFERTA)
        {
             comando.setToken(comando.getToken().REGISTRAR_OFERTA,'_');
             scanner.avanzar();

             return;
        }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().MODIFICAR_FECHA_LIMITE)
        {
             comando.setToken(comando.getToken().MODIFICAR_FECHA_LIMITE,'_');
             scanner.avanzar();

             return;
        }
       if (scanner.getToken().getToken()==scanner.getToken().getToken().ELIMINAR_OFERTA)
        {
             comando.setToken(comando.getToken().ELIMINAR_OFERTA,'_');
             scanner.avanzar();

             return;
        }



        if (scanner.getToken().getToken()==scanner.getToken().getToken().LISTAR_USUARIOS)
        {
             comando.setToken(comando.getToken().LISTAR_USUARIOS,'_');
             scanner.avanzar();

             return;
        }  if (scanner.getToken().getToken()==scanner.getToken().getToken().LISTAR_AREA)
        {
             comando.setToken(comando.getToken().LISTAR_AREA,'_');
             scanner.avanzar();

             return;
        }  if (scanner.getToken().getToken()==scanner.getToken().getToken().LISTAR_EMPRESA)
        {
             comando.setToken(comando.getToken().LISTAR_EMPRESA,'_');
             scanner.avanzar();

             return;
        }  if (scanner.getToken().getToken()==scanner.getToken().getToken().LISTAR_TITULO)
        {
             comando.setToken(comando.getToken().LISTAR_TITULO,'_');
             scanner.avanzar();

             return;
        }

       if (scanner.getToken().getToken()==scanner.getToken().getToken().BUSCAR_OFERTA)
        {
             comando.setToken(comando.getToken().BUSCAR_OFERTA,'_');
             scanner.avanzar();

             return;
        }

        if (scanner.getToken().getToken()==scanner.getToken().getToken().LISTAR_OFERTAS)
        {
             comando.setToken(comando.getToken().LISTAR_OFERTAS,'_');
             scanner.avanzar();

             return;
        }
        */



    }


    private void informacionProducto()
    {
        if (scanner.getToken().getToken()==scanner.getToken().getToken().DOSPTOS)
        {
            scanner.avanzar();
            numero();
            muchosNumeros();
        }
         else ;
    }


    private void numero()
    {
        if (scanner.getToken().getToken()==scanner.getToken().getToken().NUMERO)
        {
            if(comando.getToken()==comando.getToken().CANCELAR_PRODUCTO )//||comando.getToken()==comando.getToken().CLASIFICAR_CLIENTE

                valores.add(scanner.getAtr());
            else
                 datos.add(scanner.getAtr());

            scanner.avanzar();
        }
        else ;
    }


    private void muchosNumeros()
    {
        if (scanner.getToken().getToken()==scanner.getToken().getToken().COMA)
         {
             scanner.avanzar();
             numero();
             muchosNumeros();
         }
         else ;
    }


    private void ordenarProducto()
    {
        if (scanner.getToken().getToken()==scanner.getToken().getToken().DOSPTOS)
        {
            scanner.avanzar();

              ordenarUnProducto();
              ordenarMuchosProductos();
        }
         else ;
    }


    private void ordenarUnProducto()
    {
       if (scanner.getToken().getToken()==scanner.getToken().getToken().CA)
       {
              scanner.avanzar();

            if (scanner.getToken().getToken()==scanner.getToken().getToken().NUMERO)
            {
                 valores.add(scanner.getAtr());
                 scanner.avanzar();
              if (scanner.getToken().getToken()==scanner.getToken().getToken().COMA)
              {
                  scanner.avanzar();

                if (scanner.getToken().getToken()==scanner.getToken().getToken().NUMERO)
                {

                   valores.add(scanner.getAtr());

                   scanner.avanzar();
                   datos.add(valores);

                   valores=new LinkedList();


                    if (scanner.getToken().getToken() == scanner.getToken().getToken().CC)
                    scanner.avanzar();
                    else;
                }
                else;
             }
             else;

            }
            else;
       }
        else;
    }


  private void ordenarMuchosProductos()
  {
    if (scanner.getToken().getToken()==scanner.getToken().getToken().COMA)
    {
         scanner.avanzar();
         ordenarUnProducto();
         ordenarMuchosProductos();
    }
     else;
  }


    private void registrarCliente()
    {
        if (scanner.getToken().getToken()==scanner.getToken().getToken().DOSPTOS)
        {
            scanner.avanzar();
            ID();
            muchosIDs();
        }
         else ;
    }


     private void ID()
     {
         if (scanner.getToken().getToken()==scanner.getToken().getToken().ID)
         {
             datos.add(scanner.getAtr());
             scanner.avanzar();
         }
         else ;
     }


    private void muchosIDs()
    {
        if (scanner.getToken().getToken()==scanner.getToken().getToken().COMA)
         {
             scanner.avanzar();
             ID();
         }
         else ;
    }

    private void cotizacion()
    {
        if (scanner.getToken().getToken() == scanner.getToken().getToken().DOSPTOS)
        {
            scanner.avanzar();
            unaCotizacion();
            muchasCotizaciones();
        }
         else ;
    }


    private void unaCotizacion()
    {
       if (scanner.getToken().getToken()==scanner.getToken().getToken().CA)
       {
          scanner.avanzar();

            if (scanner.getToken().getToken()==scanner.getToken().getToken().NUMERO)
            {
                 valores.add(scanner.getAtr());
                 scanner.avanzar();
              if (scanner.getToken().getToken()==scanner.getToken().getToken().COMA)
              {
                  scanner.avanzar();

               if (scanner.getToken().getToken()==scanner.getToken().getToken().NUMERO)
               {
                   valores.add(scanner.getAtr());
                   scanner.avanzar();
                   datos.add(valores);
                   valores=new LinkedList();

                 if (scanner.getToken().getToken() == scanner.getToken().getToken().CC)
                    scanner.avanzar();
                  else;
               }
                else;
             }
             else;

            }
            else;
       }
        else;
    }


    private void muchasCotizaciones()
    {
      if (scanner.getToken().getToken()==scanner.getToken().getToken().COMA)
      {
           scanner.avanzar();
           unaCotizacion();
           muchasCotizaciones();
      }
       else;
    }


    private void cancelarProducto()
    {
      if (scanner.getToken().getToken()==scanner.getToken().getToken().DOSPTOS)
      {
          scanner.avanzar();
          cancelarProductoUnPedido();
          cancelarProductoMuchosPedidos();
      }
       else ;
    }


    private void cancelarProductoUnPedido()
    {
      if (scanner.getToken().getToken()==scanner.getToken().getToken().CA)
      {
           scanner.avanzar();
           numero();
           muchosNumeros();

         datos.add(valores);
         valores = new LinkedList();

        if (scanner.getToken().getToken()==scanner.getToken().getToken().CC)
          scanner.avanzar();
        else  ;

      }
      else;
    }


  private void cancelarProductoMuchosPedidos()
  {
    if (scanner.getToken().getToken()==scanner.getToken().getToken().COMA)
    {
        scanner.avanzar();

        cancelarProductoUnPedido();
        cancelarProductoMuchosPedidos();
    }
     else ;
  }


  private void clasificarCliente()
    {
      if (scanner.getToken().getToken()==scanner.getToken().getToken().DOSPTOS)
      {
          scanner.avanzar();

          clasificarUnCliente();
          clasificarMuchosClientes();
      }
       else ;

    }


    private void clasificarUnCliente()
    {
      if (scanner.getToken().getToken()==scanner.getToken().getToken().CA)
      {
           scanner.avanzar();

           numero();
           muchosNumeros();

         datos.add(valores);
         valores = new LinkedList();

        if (scanner.getToken().getToken()==scanner.getToken().getToken().CC)
          scanner.avanzar();
        else  ;

      }
      else;
    }


  private void clasificarMuchosClientes()
  {
    if (scanner.getToken().getToken()==scanner.getToken().getToken().COMA)
    {
        scanner.avanzar();
        clasificarUnCliente();
        clasificarMuchosClientes();
    }
     else ;
  }


}
